// 重写数组的部分方法

let oldArrayProto = Array.prototype

export let newArrayProto = Object.create(oldArrayProto)

let methods = [
    'push',
    'pop',
    'shift',
    'unshift',
    'sort',
    'splice'
]

methods.forEach(method => {
    newArrayProto[method] = function(...args) { // 这里重写了数组的方法
        // 内部调用原来的方法
        const result = oldArrayProto[method].call(this, ...args)

        // 我们需要对新增的数据再次进行劫持
        let inserted;
        let ob = this.__ob__
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args
                break;
            case 'splice':
                inserted = args.splice(2)
            default:
                break;
        }
        // console.log(inserted);
        if(inserted) { // 对新增的内容再次进行观测 
            ob.observeArray(inserted)
        }
        return result
    }
})